golang-module / carbon

A simple, semantic and developer-friendly golang package for time

Home Page:https://pkg.go.dev/github.com/golang-module/carbon/v2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Formatting functions not thread safe

mariyamkhalid opened this issue · comments

Hello,

I encountered an issue with the following code:

package main

import (
	"fmt"
	"time"

	"github.com/golang-module/carbon/v2"
)

func say(rawTime carbon.Carbon) {
	formatted := rawTime.ToShortMonthString()
	fmt.Println(formatted)
}

func main() {
	rawTime := carbon.Parse("2022-05-01", carbon.UTC)
	go say(rawTime)
	go say(rawTime)
	go say(rawTime)
	time.Sleep(100 * time.Millisecond)
}

golang version: 1.19

carbon version:v2.2.3

time zone: UTC

I expected to get:

May
May
May

But I actually get:

fatal error: concurrent map read and map write

goroutine 11 [running]:
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xed9ffc480, 0x0}, 0x0, 0x250b420, 0xc00061a940, {0x0, 0x0}}, {0x0, 0x0, ...})
        /Users/mariyam.khalid/workspace/ntbue-insights-service/vendor/github.com/golang-module/carbon/v2/outputer.go:61 +0x1ed
tableau/ntbue-insights-service/internal/facts_test.say({{0x0, 0xed9ffc480, 0x0}, 0x0, 0x250b420, 0xc00061a940, {0x0, 0x0}})

Thanks!

commented

Fixed in version 2.2.4

Thanks! I think that fixed some issues.
But I'm still getting concurrent read write panics on the same carbon instance..

import (
	"fmt"
	"time"

	"github.com/golang-module/carbon/v2"
)

func say(rawTime carbon.Carbon) {
	formatted := rawTime.ToShortMonthString()
	fmt.Println(formatted)
}

func main() {
	cDate := carbon.Parse("2022-12-01")
	for i := 0; i < 30; i++ {
		go say(cDate)
	}
	time.Sleep(100 * time.Millisecond)
}
commented

Fixed in version 2.2.5

This problem still happens. I can reproduce it with version 2.2.5 and 2.3.5, using the sample program provided by Mariyam on Aug 22.

Should I create a new issue report, or can this one be re-opened?

image image

Run the program several times. I found that the concurrent map access error happens about half of the time. I was also running it from the command line with go run.

This is using carbon v2.3.5.

$ go run ./carbon-test.go

fatal error: concurrent map read and map write
Dec
fatal error: concurrent map read and map write
fatal error: concurrent map read and map write

goroutine 34 [running]:
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:69 +0x149
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 1 [sleep]:
time.Sleep(0x5f5e100)
	/Users/david/.goenv/versions/1.21/src/runtime/time.go:195 +0x125
main.main()
	/Users/david/testing/carbon-test.go:20 +0x11c

goroutine 6 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 7 [runnable]:
reflect.mapassign_faststr0(0x10ca100, 0x10c5bc0?, {0xc0001800ba?, 0x110f7a0?}, 0x10c5bc0?)
	/Users/david/.goenv/versions/1.21/src/runtime/map.go:1376 +0x25
reflect.mapassign_faststr(0x10c5bc0?, 0xc000182010?, {0xc0001800ba, 0x6}, 0x19?)
	/Users/david/.goenv/versions/1.21/src/reflect/value.go:3837 +0xa9
reflect.Value.SetMapIndex({0x10ca100?, 0xc0000240a0?, 0x97?}, {0x10c5bc0, 0xc0001820e0, 0x98}, {0x10c5bc0, 0xc000182010, 0x198})
	/Users/david/.goenv/versions/1.21/src/reflect/value.go:2402 +0x225
encoding/json.(*decodeState).object(0xc000186000, {0x10c4c40?, 0xc0000240a0?, 0x1010000000010?})
	/Users/david/.goenv/versions/1.21/src/encoding/json/decode.go:797 +0x13c5
encoding/json.(*decodeState).value(0xc000186000, {0x10c4c40?, 0xc0000240a0?, 0x1216a68?})
	/Users/david/.goenv/versions/1.21/src/encoding/json/decode.go:374 +0x3e
encoding/json.(*decodeState).unmarshal(0xc000186000, {0x10c4c40?, 0xc0000240a0?})
	/Users/david/.goenv/versions/1.21/src/encoding/json/decode.go:181 +0x133
encoding/json.Unmarshal({0xc000184000, 0x2f9, 0x300}, {0x10c4c40, 0xc0000240a0})
	/Users/david/.goenv/versions/1.21/src/encoding/json/decode.go:108 +0x111
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:69 +0x18e
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 8 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 9 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 10 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 11 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 12 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 13 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 14 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 15 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 16 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 17 [running]:
	goroutine running on other thread; stack unavailable
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 18 [runnable]:
main.main.func1()
	/Users/david/testing/carbon-test.go:18
runtime.goexit()
	/Users/david/.goenv/versions/1.21/src/runtime/asm_amd64.s:1650 +0x1
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 19 [runnable]:
main.main.func1()
	/Users/david/testing/carbon-test.go:18
runtime.goexit()
	/Users/david/.goenv/versions/1.21/src/runtime/asm_amd64.s:1650 +0x1
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 20 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 22 [runnable]:
main.main.func1()
	/Users/david/testing/carbon-test.go:18
runtime.goexit()
	/Users/david/.goenv/versions/1.21/src/runtime/asm_amd64.s:1650 +0x1
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 23 [runnable]:
main.main.func1()
	/Users/david/testing/carbon-test.go:18
runtime.goexit()
	/Users/david/.goenv/versions/1.21/src/runtime/asm_amd64.s:1650 +0x1
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 24 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 25 [runnable]:
main.main.func1()
	/Users/david/testing/carbon-test.go:18
runtime.goexit()
	/Users/david/.goenv/versions/1.21/src/runtime/asm_amd64.s:1650 +0x1
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 26 [running]:
	goroutine running on other thread; stack unavailable
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 27 [runnable]:
main.main.func1()
	/Users/david/testing/carbon-test.go:18
runtime.goexit()
	/Users/david/.goenv/versions/1.21/src/runtime/asm_amd64.s:1650 +0x1
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 28 [runnable]:
main.main.func1()
	/Users/david/testing/carbon-test.go:18
runtime.goexit()
	/Users/david/.goenv/versions/1.21/src/runtime/asm_amd64.s:1650 +0x1
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 29 [runnable]:
fmt.(*buffer).writeString(...)
	/Users/david/.goenv/versions/1.21/src/fmt/print.go:108
fmt.(*fmt).padString(0x11d0468?, {0xc00018e02c, 0x3})
	/Users/david/.goenv/versions/1.21/src/fmt/format.go:110 +0x217
fmt.(*fmt).fmtS(0x100b8fe?, {0xc00018e02c?, 0x0?})
	/Users/david/.goenv/versions/1.21/src/fmt/format.go:359 +0x39
fmt.(*pp).fmtString(0xc000290000?, {0xc00018e02c?, 0xd0?}, 0x10d8100?)
	/Users/david/.goenv/versions/1.21/src/fmt/print.go:494 +0x85
fmt.(*pp).printArg(0xc000290000, {0x10c5bc0?, 0xc00028e000}, 0x76)
	/Users/david/.goenv/versions/1.21/src/fmt/print.go:741 +0x1bb
fmt.(*pp).doPrintln(0xc000290000, {0xc00020ef60?, 0x1, 0xc00011c6e8?})
	/Users/david/.goenv/versions/1.21/src/fmt/print.go:1223 +0x38
fmt.Fprintln({0x110e2c8, 0xc00004a010}, {0xc00011c760, 0x1, 0x1})
	/Users/david/.goenv/versions/1.21/src/fmt/print.go:304 +0x49
fmt.Println(...)
	/Users/david/.goenv/versions/1.21/src/fmt/print.go:314
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:12 +0x7b
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 30 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 31 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 32 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 35 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/Users/david/.goenv/versions/1.21/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00001a180)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:171 +0x15d
sync.(*Mutex).Lock(...)
	/Users/david/.goenv/versions/1.21/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x0?)
	/Users/david/.goenv/versions/1.21/src/sync/rwmutex.go:147 +0x31
github.com/golang-module/carbon/v2.(*Language).SetLocale(0xc000024080, {0x10e11e0, 0x2})
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/language.go:56 +0x4b
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:67 +0x125
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 26 [running]:
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:69 +0x149
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78

goroutine 17 [running]:
github.com/golang-module/carbon/v2.Carbon.ToShortMonthString({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}}, ...)
	/Users/david/testing/vendor/github.com/golang-module/carbon/v2/outputer.go:69 +0x149
main.say({{0x0, 0xedb1a5600, 0x11a7c80}, 0x0, 0x0, 0x0, 0x11a7c80, 0xc000024080, {0x0, 0x0}})
	/Users/david/testing/carbon-test.go:11 +0x3f
created by main.main in goroutine 1
	/Users/david/testing/carbon-test.go:18 +0x78
exit status 2

Fixed in v2.3.6, you can test in ToMonthString, ToShortMonthString, ToWeekString, ToShortWeekString, Season, Constellation methods

Have you tested it and there are still any issues?

I cannot reproduce the problem with v2.3.6.