@Brian
That example is a superbly concise explanation go mod. Thanks! And I had no 
idea you could specify filenames and modules in the Playground.  That's 
really useful!

On Wednesday, April 13, 2022 at 3:11:54 AM UTC-4 Brian Candler wrote:

> > I am a little bewildered by  the new mod configuration.
>
> It's as simple as this:
>
> go mod init blah
> go mod tidy
>
> You can put anything(*) for "blah". Literally "blah" will work. It's just 
> whatever name you want to give your module. However if you plan to publish 
> your module on github then using "github.com/name/project" allows it to 
> be found automatically (**).
>
> "go mod tidy" reads through your source code, finds the imported 
> dependencies, and fetches them for you.  After that, a "go build" or "go 
> run" will work.  If you add or remove dependencies, run "go mod tidy" again.
>
> These commands create "go.mod" and "go.sum" files. They become part of 
> your source code - i.e. you should check them in if you are using a source 
> control system.
>
> If you create additional packages in subdirectories, then those packages 
> are referenced in import statements as <modulename>/<subdir>. You only need 
> one go.mod at the top level.
> Example: https://go.dev/play/p/GgHLoOuHtUH
>
> HTH,
>
> Brian.
>
> (*) OK, not quite anything: there are some lexical constraints.
> https://go.dev/ref/mod#go-mod-file-ident
> (**) See
> https://go.dev/ref/mod#module-path
>
> On Wednesday, 13 April 2022 at 07:35:13 UTC+1 yan.z...@gmail.com wrote:
>
>> Thank you Steven. 
>> I am a little bewildered by  the new mod configuration. Will it compile 
>> If I download the source file from the new github source to src directory 
>> without further setting up a mod in the old fashioned way? I am using 
>> go1.15.
>>
>> And today I ran a test logging all the sendings to Redis and readings 
>> from Redis. It is fine - nothing went wrong. But 
>> AnotherRedisDesktopManager still shows the same string format - which I 
>> guess is due to it is 32bit and fail to transfer a long decimal to float32.
>>
>> So nothing is wrong in golang or its open-source package.
>>
>> On Tue, Apr 12, 2022 at 9:56 PM Steven Hartland <ste...@multiplay.co.uk> 
>> wrote:
>>
>>> First off, the package you're using for redis isn't maintained; you 
>>> should switch to github.com/gomodule/redigo/redis instead, which will 
>>> allow you to remove the c == nil check as that doesn't happen.
>>>
>>> In your example you're ignoring error from json.Marshal which could be 
>>> hiding a problem, so I would recommend you handle that.
>>>
>>> encoding/json should represent float as a json number so I would never 
>>> expect what you're seeing but its not clear to me if that is down to how 
>>> you are viewing it.
>>>
>>> On Tue, 12 Apr 2022 at 04:02, Zhaoxun Yan <yan.z...@gmail.com> wrote:
>>>
>>>> The scenario is upon receiving an incoming financial quotation, save it 
>>>> as a string of json into a Redis service. Sorry but I cannot provide the 
>>>> whole code of quotation receiving here, which is very complex with cgo. 
>>>> But 
>>>> the code below will help you get a glimpse on what should be going on:
>>>>
>>>> import (
>>>>     "encoding/json"
>>>>     //"errors"
>>>>     "fmt"
>>>>     "time"
>>>>     
>>>>     "github.com/garyburd/redigo/redis"
>>>> )
>>>>
>>>> var pool *redis.Pool
>>>>
>>>> type Fvprices struct {
>>>>     P float64 `json:"price"`
>>>>     F float64 `json:"floor"`
>>>>     C float64 `json:"ceiling"`
>>>>     S float64 `json:"settle"`
>>>>     T int64   `json:"time"`
>>>> }
>>>>
>>>> func init() {
>>>>     pool = newPool()
>>>> }
>>>>
>>>> var redisport = "6379"
>>>> var redisip = "127.0.0.1"
>>>> var password = ""
>>>>
>>>> func newPool() *redis.Pool {
>>>>
>>>>     fmt.Println("redis @", redisport, redisip, password)
>>>>     return &redis.Pool{ 
>>>>         MaxIdle:     4,
>>>>         MaxActive:   50, // max number of connections
>>>>         IdleTimeout: 30 * time.Second,
>>>>
>>>>         Dial: func() (redis.Conn, error) {
>>>>             c, err := redis.DialURL("redis://" + redisip + ":" + 
>>>> redisport)
>>>>             if err != nil {
>>>>                 ErrMsg = fmt.Sprintf("redis connection error: %s", err.
>>>> Error())
>>>>                 fmt.Println(time.Now().Format("2006-01-02 15:04:05"), 
>>>> ErrMsg)
>>>>                 return nil, err
>>>>             }
>>>>             if _, autherr := c.Do("AUTH", password); autherr != nil {
>>>>                 ErrMsg = fmt.Sprintf("redis password error: %s", err.
>>>> Error())
>>>>                 fmt.Println(time.Now().Format("2006-01-02 15:04:05"), 
>>>> ErrMsg)
>>>>                 return nil, autherr
>>>>             }
>>>>             return c, nil
>>>>         },
>>>>     }
>>>> }
>>>>
>>>> func Upfutureprice(future_id string,
>>>>     future_price, lowerLimitPrice, upperLimitPrice, preSettlementPrice 
>>>> float64,
>>>>     updatetime time.Time) {
>>>>
>>>>     c := pool.Get()
>>>>     if c == nil {
>>>>         return
>>>>     }
>>>>     defer c.Close()
>>>>
>>>>     content := Fvprices{
>>>>         P: future_price,
>>>>         F: lowerLimitPrice,
>>>>         C: upperLimitPrice,
>>>>         S: preSettlementPrice,
>>>>         T: updatetime.UnixNano() / 1e6,
>>>>     }
>>>>
>>>>     js, _ := json.Marshal(content)
>>>>
>>>>     if _, err := c.Do("SET", future_id, js); err != nil {
>>>>         fmt.Println("cannot save to redis:", err)
>>>>     }
>>>> }
>>>>
>>>> So obviously until the function "Upfutureprice" everything is correct, 
>>>> for all  four prices it receives are in float64 format. After running this 
>>>> program for one day, I just browse the redis using 
>>>> AnotherRedisDesktopManager via ssh port forwarding, and something strange 
>>>> happens as I clicking on various future_id key strings:
>>>>
>>>> {
>>>> price:807
>>>> floor:720.6
>>>> ceiling:881
>>>> settle:"800.8000000000001"
>>>> time:1649726499000
>>>> }
>>>>
>>>> {
>>>> price:"3691.0000000000005"
>>>> floor:3237
>>>> ceiling:4204
>>>> settle:3721
>>>> time:1649726910500
>>>> }
>>>>
>>>> {
>>>> price:"15405.000000000004"
>>>> floor:13625
>>>> ceiling:17340
>>>> settle:15485
>>>> time:1649728303500
>>>> }
>>>>
>>>> {
>>>> price:"800.4000000000001"
>>>> floor:720.6
>>>> ceiling:881
>>>> settle:"800.8000000000001"
>>>> time:1649728048000
>>>> }
>>>>
>>>> Note quotations above. I wonder how encoding/json can made 
>>>> transformation from a float64 inside struct Fvprices  to a string 
>>>> instead? It seems that only long decimals would trigger such an error 
>>>> while 
>>>> short decimals won't:
>>>>
>>>> {
>>>> price:2910
>>>> floor:2443.5
>>>> ceiling:3305.5
>>>> settle:2874.5
>>>> time:1649728261026
>>>> }
>>>>
>>>> How could that happen? I am really puzzled.
>>>>
>>>> Regards,
>>>>     Zhaoxun
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "golang-nuts" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to golang-nuts...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/golang-nuts/f42b29b3-de17-48c6-9f71-1176f1288396n%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/golang-nuts/f42b29b3-de17-48c6-9f71-1176f1288396n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/f54a1824-ec5e-4c5c-9fc3-a327c012f694n%40googlegroups.com.

Reply via email to