"txtar <https://pkg.go.dev/golang.org/x/tools/txtar>" is the magic.

In the playground, there's a dropdown on the right - it says "Hello, 
World!" by default.  From here, you can select the example called "Multiple 
Files".

On Thursday, 14 April 2022 at 17:50:14 UTC+1 michael...@gmail.com wrote:

> @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/ce7770ff-d54c-4221-8b6c-d7ee0529ce5dn%40googlegroups.com.

Reply via email to