@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.